
import $app from '../$app';
import $ajax from '../$ajax';
import $store from '@/store';
import $router from '@/router'
import Vue from 'vue';
import { scrollTop } from '@/libs/util';



//层相关
export default {
    /**
	 * loading 显示转转
	 * $app.loading() 显示
	 * $app.loading('hide') 隐藏
	 **/
	loading(text) {


		if (text == 'hide') { //隐藏
			$store.commit('upData_loadGlobal', {
				show: false,
				text: ''
			});
			$store.commit('upData_loadTran', false);
		} else { //显示
			//显示层没有显示，才触发，以免两层重叠
			if (!$store.state.F_cat.loadGlobal.show) {
				$store.commit('upData_loadGlobal', {
					show: true,
					text: (text || '加载中...')
				});
			}
		}

	},
    /**
	 * loadingTran 透明白底
	 * $app.loadingTran() 显示
	 **/
	loadingTran() {
		$store.commit('upData_loadTran', true);
	},

	/**
	 * 网络超时
	 * text url地址，提示文字 选填项
	 **/
	networkTimeout(text) {

		$store.commit('upData_networkTimeout', {
			show: true,//显示层
			text: text || ''
		});

	},

    /**
	 * toast插件
	 * text 提示文字 必填
	 * judge: true 恭喜提示 / false 失败提示
	 * callBack 回调函数 选填
	 * num 时间 选填
	 **/
	toast(text, judge, callBack, num) {

		$store.commit('upData_toastGlobal', {
			show: true,//显示层
			good: (!!judge),//布尔值
			text: text
		});

		setTimeout(() => {
			// 初始化所有
			$store.commit('upData_toastGlobal', {
				show: false,
				good: false,
				text: ''
			});
			callBack instanceof Function && callBack();
		}, (num || 1500));

	},


	/**
	 * alert框
	 * content 提示文字 必填
	 * title 标题 选填
	 * callBack 选填
	 **/
	alert(content, title, callBack) {
		$app.alertZz(1, content, title, callBack);
	},
	alertGood(content, title, callBack) {
		$app.alertZz(2, content, title, callBack);
	},
	alertZz(whoT, content, title, callBack) {
		let obj = {
			title: title || '温馨提示',
			content,
			onOk: () => {
				setTimeout(() => {
					callBack instanceof Function && callBack();
				}, 300);// iview 全局弹窗关闭动画，需要0.3秒
			}
		};
		if (whoT == 1) {
			Vue.prototype.$Modal.info(obj);
		} else {
			Vue.prototype.$Modal.success(obj);
		}

	},

	/**
	 * 二选一 ,确认框
	 * text 提示文字 必填
	 * header 标题 选填
	 * obj 选填 有默认值
	 * obj.yesText;		obj.yesFun;		obj.noText;		obj.noFun;
	 **/
	confirm(text, header, obj) {


		let yesText = !!obj ? obj.yesText : '确定';
		let yesFun = () => {
			setTimeout(() => {
				console.log('点击 确定');
				!!obj && obj.yesFun instanceof Function && obj.yesFun();
			}, 300);// iview 全局弹窗关闭动画，需要0.3秒
		};

		let noText = !!obj ? obj.noText : '取消';
		let noFun = () => {
			setTimeout(() => {
				console.log('点击 取消');
				!!obj && obj.noFun instanceof Function && obj.noFun();
			}, 300);// iview 全局弹窗关闭动画，需要0.3秒
		};

		Vue.prototype.$Modal.confirm({
			title: header || '温馨提示',
			content: text,
			okText: yesText,
			onOk: yesFun,
			cancelText: noText,
			onCancel: noFun
		});


	},

	// 关闭指定页面
	closeTag(obj) {

		// 关闭页面的时候，工作区短暂隐藏，路由通过后，再显示
		$store.commit('upData_contentWrapperShow', false);
		$store.commit('closeTag', obj); // 关闭这个页面

		$store.commit('upData_contentWrapperShow', true);

	},

	//页面滚动-指定位置
	scroll_to_top(num) {
		// .getBoundingClientRect()
		let body = document.getElementById('cat-body');//容器，最外层加了一个id

		//用dom的方式，使页面滚动到对应位置
		scrollTop(body, body.offsetHeight, num, 0);
	},

	// 替换浏览器导航的参数，使中途刷新，页面永远留在正确位置
	tagNavReplace(newRouterObj) {

    	// 替换头部地址栏参数 永远保留在正确的位置
    	$router.replace(newRouterObj);

		Vue.prototype.$nextTick(() => {
			let tagNaveList = $app.getLocal('tagNaveList');
			tagNaveList.forEach((val, i) => {
				// 如果页面的名字一样
				if (val.name == newRouterObj.name) {
					val.query=$router.history.current.query;
					val.params=$router.history.current.params;
				}
			});
			$app.setLocal(tagNaveList,'tagNaveList');//重新存储
			$store.commit('setTagNavList', tagNaveList)//改变全局vuex的存储
			// console.log('改变全局vuex的存储 = ',$store.state.app.tagNavList)
		});
		
	},


	// 关闭已有页面
	closeHadPage(name, callBack) {
		$app.HasAsPage(name, () => {
			//setTimeout 延时 0 秒 和 $nextTick  作用是一样的。
			setTimeout(() => {
				callBack instanceof Function && callBack();
			},7);
		});
	},

	//配合上者使用 判断是否 有一模一样的页面
	//本项目特殊关系，本地存储的tagNaveList，相同名字的路由，只会存在一个，一个
	HasAsPage(name, callBack) {
		let tagNaveList = $app.getLocal('tagNaveList');
		tagNaveList.forEach((val, i) => {
			// 如果页面的名字一样
			if (val.name == name) {
				$app.closeTag(val); // 关闭这个页面
			}
		});
		callBack instanceof Function && callBack();
	},


	//iview-admin 点击左侧栏nav 或者 顶部页签nav 修复
	// num:1点击左侧，2点击头部非页签分页
	clickNav(name, params, query, num) {
		//这里要延时 0 秒才能更新数据，原因不详
		// 原理，百度搜索：$nextTick setTimeout 作用是一样的。
		setTimeout(() => {
			//获取当前路由做判断
			let {
				name: nA,
				params: pA,
				query: qA
			} = $router.history.current;

			if (nA == name && JSON.stringify(pA) == JSON.stringify(params) && JSON.stringify(qA) == JSON.stringify(query)) {
				console.log('自己点击自己，毛线都不做');
			} else {
				//左侧栏
				if (num == 1) {
					if (nA == name) {
						console.log('高亮状态下，自己点击自己')
					} else {

						// 路由跳转
						$router.push({
							name,
							params,
							query
						});
					}
				} else {//头部分页签
					// 路由跳转
					$router.push({
						name,
						params,
						query
					});
				}

			}

		}, 0);
	},


	//系统推送消息弹框
	msShowBox(title, content, id, link_url, buEr, callBack) {
		let goDo = {
			render: h => {
				let out = [];

				out.push(
					h("div", { class: "marginB10 f_20" }, title),
					h("div", { class: " c999 lineH1d5 " }, content)
				);

				return out;
			}
		};

		if ($app.judgeData(link_url)) {
			//有链接跳转
			goDo.okText = "立即处理";
			goDo.onOk = () => {
				$router.push(link_url);
			};
			Vue.prototype.$Modal.confirm(goDo);
		} else {
			Vue.prototype.$Modal.info(goDo);
		}

		//标记已读
		if (buEr) {
			$ajax.pTreadMsg(id, resData => {
				$store.commit('upData_messages', resData.unread_msg_count);//右上角头像 未读消息
				callBack instanceof Function && callBack();
			});
		}
	},


}; 
